package com.wc.AlgoOJ._思维.AG0108;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

/**
 * @Author congge
 * @Date 2023/12/29 15:09
 * @description 跳石头
 * http://43.138.190.70:8888/p/AG0108
 */
public class Main {
    static FastReader sc = new FastReader();
    static int[] array;
    static int n, m, L;

    public static void main(String[] args) {
        L = sc.nextInt();
        n = sc.nextInt();
        m = sc.nextInt();
        array = new int[n + 2];
        for (int i = 1; i <= n; i++) {
            array[i] = sc.nextInt();
        }
        array[n + 1] = L;
        Arrays.sort(array);
        System.out.println(half());
    }

    public static int half() {
        int l = 0;
        int r = L;
        int ans = 0;
        while (l <= r) {
            int mid = l + (r - l) / 2;
            int needM = 0;
            // 判断所有间隔是否满足
            boolean flg = false;
            for (int i = 0; i <= n; i++) {
                // 当前间隔
                flg = false;
                for (int j = i + 1; j <= n + 1; j++) {
                    // 计算间隔
                    if (array[j] - array[i] >= mid) {
                        // 满足后计算去了几块石头
                        needM += j - i - 1;
                        // 剪枝，超过就可以break
                        if (needM > m) {
                            break;
                        }
                        // 从j块开始，-1是为了抵消上面的i++
                        i = j - 1;
                        // 说明当前的间隔是可以的
                        flg = true;
                        break;
                    }
                }
                if (!flg) {
                    break;
                }
            }
            // 间隔不行，就直接不满度条件
            if (!flg || needM > m) {
                r = mid - 1;
            } else {
                ans = mid;
                l = mid + 1;
            }
        }
        return ans;
    }
}

class FastReader {
    StringTokenizer st;
    BufferedReader br;

    FastReader() {
        br = new BufferedReader(new InputStreamReader(System.in));
    }

    String next() {
        while (st == null || !st.hasMoreElements()) {
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }

    int nextInt() {
        return Integer.parseInt(next());
    }
}
